package com.example.common.utils;


import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 * UUID 生成工具类
 */
public class UUIDUtil {

    /**
     * 生成标准 UUID（32位十六进制字符串，去掉横杠）
     */
    public static String generate() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 生成指定长度的 UUID（基于截断标准 UUID）
     *
     * @param length 需要的长度（最大32，最小8）
     * @return 指定位数的UUID
     * @throws IllegalArgumentException 如果长度不在8-32之间
     */
    public static String generate(int length) {
        if (length < 8 || length > 32) {
            throw new IllegalArgumentException("Length must be between 8 and 32");
        }
        return generate().substring(0, length);
    }

    /**
     * 生成高强度的短UUID（16位，包含数字和字母）
     */
    public static String generateShort() {
        return generateCustom(16);
    }

    /**
     * 自定义长度的强随机字符串（包含数字和大小写字母）
     *
     * @param length 生成的长度
     */
    public static String generateCustom(int length) {
        ThreadLocalRandom random = ThreadLocalRandom.current();
        char[] chars = new char[length];
        for (int i = 0; i < length; i++) {
            int choice = random.nextInt(3);
            switch (choice) {
                case 0: // 数字 0-9
                    chars[i] = (char) (random.nextInt(10) + '0');
                    break;
                case 1: // 大写字母 A-Z
                    chars[i] = (char) (random.nextInt(26) + 'A');
                    break;
                case 2: // 小写字母 a-z
                    chars[i] = (char) (random.nextInt(26) + 'a');
                    break;
            }
        }
        return new String(chars);
    }
}
